package cn.zhfeat.hatch.web.controller.view;

import cn.zhfeat.core.shiro.ShiroSessionData;
import cn.zhfeat.core.shiro.bean.ShiroSysAuthorityBean;
import cn.zhfeat.hatch.web.utils.ShiroSessionDataUtil;
import cn.zhfeat.utils.MD5Util;
import com.alibaba.fastjson.JSON;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.session.Session;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * BmUIController
 */
@Controller
@RequestMapping("/view/ui")
public class UIController {

	@Value("#{configProperties['OPEN_CARD_URL']}")
	private String OPEN_CARD_URL;
	@Value("#{configProperties['PROJECT_URL']}")
	private String PROJECT_URL;



	/**
	 *
	 * @Description: 设置 - 个人中心
	 *
	 * @author: ZhangHao
	 * @date: 2018年5月18日 下午12:28:50
	 * @version 1.0.0.1
	 */
	// @RequiresPermissions("login")
	@RequestMapping(value = "/personal")
	public String personalCenter() {
		return "system/hplus_personalInfor";
	}


	/**
	 * @description: 跳转到首页面
	 *
	 * @param httpServletRequest
	 *
	 * @author ZhangHao
	 * @date 2018年5月20日 下午2:17:01
	 * @version 1.0.0.1
	 */
	@RequestMapping("/main")
	public ModelAndView toMainPage(HttpServletRequest httpServletRequest) {

		// 格式化日期，用于计算CRM的签名
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");

		ShiroSessionData shiroSessionData = ShiroSessionDataUtil.getShiroSessionData();

		// 从session中拿到登录账号
		String userAccount = shiroSessionData.getUserAccount();

		// 拿到CRM的签名信息
		String sign = MD5Util.encodeString(MD5Util
				.encodeString("api_crm_anPOSCrmGerD4KOO1CO8iTq9WPuT" + simpleDateFormat.format(new Date()) + "login"));

		// 拿到所有菜单以及其对应的url
		List<ShiroSysAuthorityBean> auths = shiroSessionData.getAuths();

		// 拿到用户对应的一组角色权限
		String roleNames = shiroSessionData.getRoleNames();

		// 获取首页URL信息
		String mainPage = "";

		// 标记CRM店员菜单是否存在
		Long crmStaffId = 0l;

		for (ShiroSysAuthorityBean auth : auths) {
			// 取匹配上的第一个三级菜单
			// if(auth.getPermissionLevel() != null && auth.getPermissionLevel() == 3) {
			// mainPage = auth.getUrl();
			// break;
			// }

			// 拿到首页url，用于默认展示
			if ("main_page".equals(auth.getNameEn())) {
				mainPage = auth.getUrl();
			}
			// 标记CRM店员菜单是否存在
			if ("crm_staff_list".equals(auth.getNameEn())) {
				crmStaffId = auth.getId();
			}
		}

		List<ShiroSysAuthorityBean> authsCrm = new ArrayList<ShiroSysAuthorityBean>();
		// 如果是店员，则所有菜单都在店员工作台一级菜单下显示(为CRM特殊处理)
		if (crmStaffId > 0) {
			for (int i = 0; i < auths.size(); i++) {
				// 如果菜单的id与CRM店员菜单id相同
				if (auths.get(i).getId() == crmStaffId) {
					authsCrm.add(auths.get(i));
				}
				// 如果是二级菜单,则将二级菜单的父菜单设置为CRM店员工作台
				if (auths.get(i).getPermissionLevel() != null && auths.get(i).getPermissionLevel() == 2) {
					auths.get(i).setParentCode(crmStaffId);
					authsCrm.add(auths.get(i));
					// 如果是三级菜单,则直接拿到该菜单
				} else if (auths.get(i).getPermissionLevel() != null && auths.get(i).getPermissionLevel() == 3) {
					authsCrm.add(auths.get(i));
				}
			}
			auths = authsCrm;
			shiroSessionData.setAuths(auths);
			// 更新session中的用户绑定信息
			Subject subject = SecurityUtils.getSubject();
			Session session = subject.getSession();
			String shiroSessionDataStr = JSON.toJSONString(shiroSessionData);
			session.setAttribute("sessionUserData", shiroSessionDataStr);
		}

		// 初始化一个ModelAndView
		ModelAndView modelAndView = new ModelAndView("main");
		modelAndView.addObject("sysUser", shiroSessionData);
		modelAndView.addObject("account", userAccount);
		modelAndView.addObject("roleNames", roleNames);
		modelAndView.addObject("sign", sign);
		modelAndView.addObject("auths", auths);
		modelAndView.addObject("main_page", mainPage);

		// 返回前端页面进行渲染
		return modelAndView;
	}

	/**
	 * @description: 跳转到菜单展示页
	 *
	 *
	 * @author ZhangHao
	 * @date 2018年5月20日 下午3:55:33
	 * @version 1.0.0.1
	 */
	@RequestMapping("/mainView")
	public String toMainView() {
		return "main_view";
	}

	/**
	 * @description: 跳转到平台首页
	 *
	 *
	 * @author ZhangHao
	 * @date 2018年5月20日 下午4:57:48
	 * @version 1.0.0.1
	 */
	@RequestMapping("/terraceIndex")
	public String terraceIndex() {
		return "system/terraceIndex";
	}

	/**
	 * @description: 跳转到组织架构管理页面
	 *
	 * @return
	 * @author ZhangHao
	 * @date 2018年5月21日 上午11:30:27
	 * @version 1.0.0.1
	 */
	@RequestMapping("/organizational")
	public String organizationalStr() {
		return "system/organizationalStructure";
	}

	/**
	 * @description: 跳转到角色设置页面
	 *
	 * @return
	 * @author ZhangHao
	 * @date 2018年5月21日 上午11:30:56
	 * @version 1.0.0.1
	 */
	@RequestMapping("/roleSet")
	public String roleSet() {
		return "system/roleSet";
	}


	/**
	 * @description: 跳转到企业资料页
	 *
	 * @author ZhangHao
	 * @date 2018年5月21日 下午9:48:22
	 * @version 1.0.0.1
	 */
	@RequestMapping("/companyInfoShow")
	public String companyInfoShow() {
		return "system/editCompanyInfo";
	}

	/**
	 *
	 * @Description: 跳转到门店页面
	 *
	 * @author: ZhangHao
	 * @date: 2018年5月22日 下午6:34:34
	 * @version 1.0.0.1
	 */
	@RequestMapping("/baseStoreShow")
	public String baseStoreShow() {
		return "system/hplus_storeManagement";
	}

	/**
	 *
	 * @Description: 跳转到新增编辑页面
	 *
	 * @author: ZhangHao
	 * @date: 2018年5月22日 下午6:34:34
	 * @version 1.0.0.1
	 */
	@RequestMapping("/setStore")
	public String setStore() {
		return "system/hplus_setStore";
	}


	/**
	 * @description: 跳转到角色列表展示页面
	 *
	 * @return
	 * @author ZhangHao
	 * @date 2018年5月21日 下午1:30:16
	 * @version 1.0.0.1
	 */
	@RequestMapping("/roleList")
	public String RoleList() {
		return "system/hplus_role_list";
	}

	/**
	 * @description: 跳转到新增角色页面
	 *
	 * @return
	 * @author ZhangHao
	 * @date 2018年5月21日 下午9:57:40
	 * @version 1.0.0.1
	 */
	@RequestMapping("/createRole")
	public String CreateRole() {
		return "system/hplus_role_create";
	}

	/**
	 * @description: 跳转到角色选择页面
	 *
	 * @return
	 * @author ZhangHao
	 * @date 2018年5月24日 下午8:55:30
	 * @version 1.0.0.1
	 */
	@RequestMapping("/selectRole")
	public String SelectRole() {
		return "system/hplus_role_select";
	}

	/**
	 * @description: 跳转到中央控制页面
	 *
	 * @return
	 * @author ZhangHao
	 * @date 2018年5月25日 下午6:11:15
	 * @version 1.0.0.1
	 */
	@RequestMapping("/activityAuthority")
	public String activityAuthority() {
		return "system/activityAuthority";
	}

	/**
	 * @description: 中央控制选择活动
	 *
	 * @return
	 * @author ZhangHao
	 * @date 2018年5月25日 下午6:28:31
	 * @version 1.0.0.1
	 */
	@RequestMapping("/authorityShowActivity")
	public String authoritShowActivity() {
		return "system/showActivity";
	}

	/**
	 * @description: 中央控制选择业务列表
	 *
	 * @return
	 * @author ZhangHao
	 * @date 2018年5月25日 下午6:20:10
	 * @version 1.0.0.1
	 */
	@RequestMapping("/authorityShowBusiness")
	public String authorityShowBusiness() {
		return "system/activityDialig";
	}

	/**
	 * @description: 中央控制显示部门
	 *
	 * @return
	 * @author ZhangHao
	 * @date 2018年5月25日 下午6:22:38
	 * @version 1.0.0.1
	 */
	@RequestMapping("/showDepartment")
	public String showDepartment() {
		return "system/showDepartment";
	}

	/**
	 * @description: 新增、编辑用户
	 *
	 * @return
	 * @author ZhangHao
	 * @date 2018年5月25日 下午9:33:23
	 * @version 1.0.0.1
	 */
	@RequestMapping("/createUser")
	public String createUser() {
		return "system/hplus_user_create";
	}

	/**
	 * @description: 员工新增页面选择角色弹窗
	 *
	 * @return
	 * @author ZhangHao
	 * @date 2018年5月26日 下午10:55:45
	 * @version 1.0.0.1
	 */
	@RequestMapping("/selectRoleForCreateUser")
	public String selectRoleForCreateUser() {
		return "system/userCreateRoleSelect";
	}

	/**
	 * @description: 跳转到找回密码页
	 *
	 * @return
	 * @author ZhangHao
	 * @date 2018年5月28日 上午11:53:23
	 * @version 1.0.0.1
	 */
	@RequestMapping("/recoverPwd")
	public String recoverPwd() {
		return "system/recoverPwd";
	}

	/**
	 * @description: 跳转到重置密码页
	 *
	 * @return
	 * @author ZhangHao
	 * @date 2018年5月28日 上午11:54:20
	 * @version 1.0.0.1
	 */
	@RequestMapping("/resetPwd")
	public String resetPwd() {
		return "system/resetPwd";
	}

	/**
	 * @description: 登出跳转的页面
	 *
	 * @return
	 * @author ZhangHao
	 * @date 2018年5月28日 下午9:15:54
	 * @version 1.0.0.1
	 */
	@RequestMapping("/loginPwd")
	public String loginPwd() {
		return "system/loginPwd";
	}

	/**
	 * @description: 首次登陆确认页面
	 *
	 * @return
	 * @author ZhangHao
	 * @date 2018年5月29日 下午8:30:22
	 * @version 1.0.0.1
	 */
	@RequestMapping("/perInforCon")
	public String perInforCon() {
		return "system/personalInforConfirmation";
	}

	/**
	 * @description: 跳转到无权限页面
	 *
	 * @return
	 * @author ZhangHao
	 * @date 2018年6月1日 上午11:40:13
	 * @version 1.0.0.1
	 */
	@RequestMapping("/nonPermissionsPage")
	public String nonPermissionsPage() {
		return "403";
	}

	/**
	 * @description: 编辑用户
	 *
	 * @return
	 * @author ZhangHao
	 * @date 2018年5月26日 下午10:55:45
	 * @version 1.0.0.1
	 */
	@RequestMapping("/updateUser")
	public String updateUser() {
		return "system/hplus_user_edit";
	}

	/**
	 * @description: 新增通知
	 *
	 * @param
	 * @author ZhangHao
	 * @date 2018/7/31 10:35
	 * @version 1.0.0.1
	 * @return java.lang.String
	 */

	@RequestMapping("/createNotice")
	public String createNotice(){
		return "system/create_notice";
	}

	/**
	 * @description: 编辑通知
	 *
	 * @param
	 * @author ZhangHao
	 * @date 2018/8/3 1:36
	 * @version 1.0.0.1
	 * @return java.lang.String
	 */
	@RequestMapping("/editNotice")
	public String editNotice(){
		return "system/edit_notice";
	}

    /**
     * @description: 跳转到用户选择页面
     *
     * @param
     * @author ZhangHao
     * @date 2018/7/31 14:13
     * @version 1.0.0.1
     * @return java.lang.String
     */

    @RequestMapping("/selectUser")
    public String selectUser() {
        return "system/hplus_user_select";
    }


	/**
	 * @description: 开通账号服务
	 *
	 * @param
	 * @author ZhangHao
	 * @date 2018/10/23 10:13
	 * @version 1.0.0.1
	 * @return java.lang.String
	 */
	@RequestMapping("/accountOpen")
	public String accountOpen(){
		return "system/accountOpen";
	}

}
